# 可变数据类型: 内存空间中的数据可以被修改的数据类型 (能做到不修改引用地址的前提下修改数据的值)
# 不可变数据类型: 内存空间中的数据不可以被修改的数据类型(不能做到不修改引用地址的前提下修改数据的值)

# 可变数据类型:
# list , 列表类型数据,在不修改引用地址的前提下,可以修改数据的值
list1 = [1, 2, 3]
print(list1)  # [1, 2, 3]
print(id(list1))  # 1812508565120

list1.append(4)
print(list1)  # [1, 2, 3, 4]
print(id(list1))  # 1812508565120

print('--------------set--------------------')
# set, 集合类型数据,在不修改引用地址的前提下,可以修改数据的值
set1 = {1, 2, 3}
print(set1)  # {1, 2, 3}
print(id(set1))  # 2377739611936

set1.add(4)
print(set1)  # {1, 2, 3, 4}
print(id(set1))  # 2377739611936

print('---------------dict-------------------')
# dict
dict1 = {'a': 1}
print(dict1)  # {'a': 1}
print(id(dict1))  # 1448850623232

dict1['b'] = 2
print(dict1)  # {'a': 1, 'b': 2}
print(id(dict1))  # 1448850623232

print('----------------不可变数据类型------------------')
# 不可变数据类型
# int, float, bool 基础数值类型数据都是不可变数据类型,只要值相同一定引用地址相同
# str
str1 = '123'
# TypeError: 'str' object does not support item assignment
# 字符串类型数据数据空间中的数据不可修改
# str1[1] = '4'

# tuple
tuple1 = (1, 2, 3)
# TypeError: 'tuple' object does not support item assignment
# 元组类型数据空间中的数据不可修改
# tuple1[1] = 4

# 1. 可变数据类型 数据值相同, 类型也相同,不一定引用地址相同,也就不一定是同一个数据
# 2. 不可变数据类型 数据值相同, 类型也相同, 引用地址就相同也就是是同一个数据
# 3. 如果要修改引用地址,必须使用= ,所有容器类型的方法都是不能修改引用地址的.

